今天繼續學習,回到昨天的部份,昨天完成了資料的前處理與讀取.
今天接續昨天的部份開始搭建神經網路,
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
#搭建網路的起手式,nn.module是所有網路的基類.
#我們開始定義一系列網路如下: #train data = (1,28,28)
self.conv1 = nn.Sequential(
nn.Conv2d(
#convolution2D
in_channels=1,
#input channel(EX:RGB)
out_channels=16,
#output feature maps
kernel_size=5,
#filter大小
stride=1,
#每次convolution移動多少
padding=2,
#在圖片旁邊補0
),
nn.ReLU(), #activation function #(16,28,28)
nn.MaxPool2d(kernel_size = 2), #(16,14,14)
)
#以上為一層conv + ReLu + maxpool
#快速寫法:
self.conv2 = nn.Sequential(
nn.Conv2d(16,32,5,1,2), #(32,14,14)
nn.ReLU(),
nn.MaxPool2d(2) #(32,7,7)
)
self.out = nn.Linear(32*7*7, 10) #10=0~9
def forward(self,x):
x = self.conv1(x)
x = self.conv2(x)
x = x.view(x.size(0), -1)
output = self.out(x)
return output
#forward流程:
#x = x.view(x.size(0), -1) 展平data
以上就完成神經網路的搭建.
cnn = CNN()
if if_use_gpu:
cnn = cnn.cuda()
使用cuda加速.
optimizer = torch.optim.Adam(cnn.parameters(), lr=LR)
loss_function = nn.CrossEntropyLoss()
#優化器使用Adam
#loss_func 使用CrossEntropy(classification task)
明天繼續完成最後一part~